package com.onec.service.trade.controller;

import com.onec.service.api.dto.response.BaseResponse;
import com.onec.service.api.enums.ResultCodeEnum;
import com.onec.service.api.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.rpc.RpcException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;

;

/**
 * spring 配置全局异常:
 * 配置该异常处理时：不可使用try-catch 捕获异常：
 *
 * @author ONEC
 */
@Slf4j
@RestControllerAdvice(basePackages = "com.ioc.trade.controller")
public class ExceptionHandlerControllerAdvice {

    /**
     * 处理产品系统异常
     *
     * @param e
     * @return
     */
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public BaseResponse handlerException(Exception e) {
        e.printStackTrace();
        return BaseResponse.error(ResultCodeEnum.SERVER_ERROR);
    }

    /**
     * 处理产品系统异常
     *
     * @param e
     * @return
     */
    @ExceptionHandler(value = RpcException.class)
    @ResponseBody
    public BaseResponse handlerRpcException(RpcException e) {
        e.printStackTrace();
        return BaseResponse.error(ResultCodeEnum.RPC_NO_PROVIDE);
    }

    /**
     * 处理自定义异常（controller and service）
     *
     * @param e
     * @return
     */
    @ExceptionHandler(value = BaseException.class)
    public BaseResponse handlerBaseException(BaseException e) {
        e.printStackTrace();
        return BaseResponse.error(e);
    }


//    /**
//     * 处理自定义异常（controller and service）
//     *
//     * @param e
//     * @return
//     */
//    @ExceptionHandler(value = TradeException.class)
//    public ResponseData handlerTradeException(TradeException e) {
//        e.printStackTrace();
//        return ResponseData.ok(BizContentResp.error(e));
//    }

}
